[libcxx] Add code coverage configuration to CMake and LIT. Summary: This patch adds configuration to CMake and LIT for running the libc++ test-suite to generate code coverage. To use code coverage use following instructions. * Find the clang resource dir using `$CXX -print-search-dirs`. Let <library-dir> be the first library search directory. * `cmake <regular-options> -DLIBCXX_GENERATE_COVERAGE=ON -DLIBCXX_COVERAGE_LIBRARY=<library-dir>/lib/<platform>/libclang_rt.profile.a <source>` * `make cxx` * `make check-libcxx` * `make generate-libcxx-coverage` The reason I want this patch upstreamed is so I can setup a bot that generates code coverage and posts in online for every revision. Reviewers: mclow.lists, jroelofs, danalbert Reviewed By: danalbert Differential Revision: http://reviews.llvm.org/D8716 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@233669 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/CMakeLists.txt b/CMakeLists.txt index 82a35e0..2e5db77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt 
@@ -64,6 +64,9 @@  This option may only be used when LIBCXX_ENABLE_THREADS=OFF." ON)  option(LIBCXX_INSTALL_HEADERS "Install the libc++ headers." ON)  option(LIBCXX_INSTALL_SUPPORT_HEADERS "Install libc++ support headers." ON) +option(LIBCXX_GENERATE_COVERAGE "Enable generating code coverage." OFF) +set(LIBCXX_COVERAGE_LIBRARY "" CACHE STRING + "The Profile-rt library used to build with code coverage")  option(LIBCXX_ENABLE_STATIC_ABI_LIBRARY "Statically link the ABI library" OFF)  set(LIBCXX_SYSROOT "" CACHE STRING "Use alternate sysroot.")  set(LIBCXX_GCC_TOOLCHAIN "" CACHE STRING "Use alternate GCC toolchain.") @@ -140,6 +143,11 @@  include(config-ix)  # Configure ABI library  include(HandleLibCXXABI) +# Configure coverage options. +if (LIBCXX_GENERATE_COVERAGE) + include(CodeCoverage) + set(CMAKE_BUILD_TYPE "COVERAGE" CACHE STRING "" FORCE) +endif()    #===============================================================================  # Setup Compiler Flags @@ -318,10 +326,15 @@    append_if(LIBCXX_CXX_FLAGS LIBCXX_TARGET_TRIPLE  "-target ${LIBCXX_TARGET_TRIPLE}") +  append_if(LIBCXX_CXX_FLAGS LIBCXX_SYSROOT "--sysroot ${LIBCXX_SYSROOT}")  append_if(LIBCXX_CXX_FLAGS LIBCXX_GCC_TOOLCHAIN  "-gcc-toolchain ${LIBCXX_GCC_TOOLCHAIN}")   +if (LLVM_USE_SANITIZER AND LIBCXX_GENERATE_COVERAGE) + message(FATAL_ERROR "LLVM_USE_SANITIZER cannot be used with LIBCXX_GENERATE_COVERAGE") +endif() +  string(REPLACE ";" " " LIBCXX_CXX_FLAGS "${LIBCXX_CXX_FLAGS}")  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LIBCXX_CXX_FLAGS}")